<?php
//   +----------------------------------------------------------------------
//   | Copyright (c) 2015-2025 http://www.hdphp.cn All rights reserved.
//   | Licensed ( http://www.hdphp.cn/licenses/ )
//   | Author: Jack <sophia2152@qq.com>
//   | 官方网址: http://www.hdphp.cn
//   | 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用。
//   | 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
//   +----------------------------------------------------------------------
namespace app\websocket;

use think\response\Json;

/**
 * Class：Response
 * 创建人：Jack
 * 创建时间：2024/1/11 10:56
 * @package app\websocket
 */
class Response
{
    /**
     * @var Json
     */
    protected $response;

    /**
     * 构造方法
     * @param Json $response
     */
    public function __construct(Json $response)
    {
        $this->response = $response;
    }

    /**
     * 注释：设置返回参数
     * 创建人：Jack
     * 创建时间：2024/1/8 16:13
     * @param string     $type
     * @param array|null $data
     * @param int        $status
     * @param array      $other
     * @return Json
     */
    public function send(string $type, ?array $data = null, int $status = 200, array $other = [])
    {
        $res = compact('type', 'status');
        if (!is_null($data)) {
            $res['data'] = $data;
        }
        $data = array_merge($res, $other);
        $this->response->data($data);
        return $this->response;
    }

    /**
     * 注释：成功
     * 创建人：Jack
     * 创建时间：2024/1/11 10:57
     * @param            $type
     * @param array|null $data
     * @param int        $status
     * @return Json
     */
    public function success($type = 'success', ?array $data = null, int $status = 200)
    {
        if (is_array($type)) {
            $data = $type;
            $type = 'success';
        }
        return $this->send($type, $data, $status);
    }

    /**
     * 注释：失败
     * 创建人：Jack
     * 创建时间：2024/1/11 10:57
     * @param            $type
     * @param array|null $data
     * @param int        $status
     * @return Json
     */
    public function fail($type = 'error', ?array $data = null, int $status = 400)
    {
        if (is_array($type)) {
            $data = $type;
            $type = 'error';
        }
        return $this->send($type, $data, $status);
    }

    /**
     * 注释：设置返只有类型没有状态的返回数据
     * 创建人：Jack
     * 创建时间：2024/1/8 16:14
     * @param string $type
     * @param        $data
     * @return Json
     */
    public function message(string $type, $data)
    {
        $this->response->data(compact('type', 'data'));
        return $this->response;
    }

    /**
     * 注释：__call
     * 创建人：Jack
     * 创建时间：2024/1/8 16:15
     * @param $name
     * @param $arguments
     * @return mixed
     */
    public function __call($name, $arguments)
    {
        return call_user_func_array([$this->response, $name], $arguments);
    }
}